<?php
	class Aviso {
		private $idAviso;
		private $idCurso;
		private $idUsuario;
		private $titulo;
		private $mensagem;
		private $dataHoraInsercao;
		
		public function Aviso($idAviso) {
			$strQuery = "SELECT * FROM avisos WHERE idAviso = " . $idAviso;

			if($resultado = BancoDados::query($strQuery)) {
				if ($resultado['qtdResultados'] > 0) {
					$this->setIdAviso($resultado[0]['idAviso']);
					$this->setIdCurso($resultado[0]['idCurso']);
					$this->setIdUsuario($resultado[0]['idUsuario']);
					$this->setTitulo($resultado[0]['titulo']);
					$this->setMensagem($resultado[0]['mensagem']);
					$this->setDataHoraInsercao($resultado[0]['dataHoraInsercao']);
				}
				else {
					$this->setIdAviso(null);
				}
			}
			else {
				$this->setIdAviso(null);
			}
		}
		
		public static function buscar ($idAviso, $idCurso, $idUsuario, $titulo, $mensagem, $dataHoraInsercaoInicio, $dataHoraInsercaoFim, $paginaAtual = NULL, $resultadosPagina = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL) {
			
			if (Aviso::validarBusca($idAviso, $idCurso, $idUsuario, $titulo, $mensagem, $dataHoraInsercaoInicio, $dataHoraInsercaoFim)) {
				$strQuery = "SELECT idAviso as idItem, idCurso, idUsuario, titulo, mensagem, dataHoraInsercao FROM avisos WHERE ";
				
				$idAvisos	=	null;
				if (is_array($idAviso)) {
					foreach ($idAviso as $id) {
						$idAvisos	.=	$id . ", ";
					}
					$idAvisos	=	preg_replace('/, $/', '', $idAvisos);
				}
				else
					$idAvisos	=	$idAviso;
	
				$strQuery .= $idAvisos == null ? "" : "idAviso IN (" . $idAvisos . ") AND ";
				$strQuery .= $idCurso == null ? "" : "idCurso = " . $idCurso . " AND ";
				$strQuery .= $idUsuario == null ? "" : "idUsuario = " . $idUsuario . " AND ";
				
				$strQuery .= $titulo == null ? "" : configuraRegexpStringBusca($titulo, 'titulo');
				$strQuery .= $mensagem == null ? "" : configuraRegexpStringBusca($mensagem, 'mensagem');
				
				$strQuery .= $dataHoraInsercaoInicio != null	?	'dataHoraInsercao >= "' . $dataHoraInsercaoInicio . ' 0:0:0" AND ' : '';
				$strQuery .= $dataHoraInsercaoFim != null		?	'dataHoraInsercao <= "' . $dataHoraInsercaoFim . ' 23:59:59" AND ' : '';
				
				$strQuery	=	preg_replace('/ WHERE $/', ' ', $strQuery);
				$strQuery	=	preg_replace('/ AND $/', ' ', $strQuery);
				$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal;';
					
				if ($resultadoCount = BancoDados::query($strQueryCount)) {
					foreach($resultadoCount as $resultado) {
						$qtdResultados	=	$resultado['qtdResultados'];
					}
	
					if ($qtdResultados > 0) {
						$paginaAtual	=	$paginaAtual == NULL	?	1 : $paginaAtual;
						$ordenacaoAtual	=	$ordenacaoAtual == NULL	?	'dataHoraInsecao' : $ordenacaoAtual;
						$ordemAtual		=	$ordemAtual == NULL		?	'ASC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
							
						$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
							
						if ($resultadosPagina != NULL) {
							$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
							$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;
	
							$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
						}
						else {
							$qtdPaginas	=	1;
						}
							
						$strQuery	.=	';';
							
						$resultado	=	BancoDados::query($strQuery);
							
						if (is_array($resultado)) {
							return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
						}
						else {
							return false;
						}
					}
					else {
						return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
					}
				}
				else {
					return false;
				}
			}
			else {
				return false;
			}
		}
		
		public static function validarBusca ($idAviso, $idCurso, $idUsuario, $titulo, $mensagem, $dataHoraInsercaoInicio, $dataHoraInsercaoFim) {
			//TODO validacao
			return true;
		}
		
		public static function inserir($idCurso, $idUsuario, $strTitulo, $strMensagem) {
			if (Aviso::valida($strTitulo, $strMensagem)) {
				$strQuery	=	"INSERT INTO avisos VALUES(default, ";
				
				$strQuery	.=	$idCurso . ", ";
				$strQuery	.=	$idUsuario . ", ";
				$strQuery	.=	"\"" . $strTitulo . "\", ";
				$strQuery	.=	"\"" . $strMensagem . "\", ";
				$strQuery	.=	"NOW())";
				
				if (BancoDados::query($strQuery)) {
					$strQuery	=	"SELECT idAviso FROM avisos WHERE idCurso = " . $idCurso . " AND idUsuario = " . $idUsuario . " AND titulo = \"" . $strTitulo . "\" AND mensagem = \"" . $strMensagem . "\" ORDER BY idAviso DESC LIMIT 1";
					if (is_array($resultado = BancoDados::query($strQuery))) {
						if (sizeof($resultado) > 0) {
							atualizaCurso($idCurso);
							return $resultado[0]['idAviso'];
						}
						else {
							return true;
						}
					}
					else {
						return true;
					}
				}
				else {
					return false;
				}
			}
			else {
				return false;
			}
		}
		
		public static function apagar ($idAviso) {
			$strQuery	=	"DELETE FROM associacoes WHERE (idElemento1 = " . $idAviso . " AND elemento1 = \"avisos\") OR (idElemento2 = " . $idAviso . " AND elemento2 = \"avisos\")";
			if (BancoDados::query($strQuery)) {
				$strQuery = "DELETE FROM avisos WHERE idAviso = " . $idAviso;
				return BancoDados::query($strQuery);
			}
			else {
				return false;
			}
		}
		
		public static function valida ($titulo, $mensagem) {
			$validou	=	true;
			
			if (!validaAlfaNumerico($titulo, constant('__TAM_TITULO_AVISO__'))){
				$validou	=	false;
				adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_TITULO'))), 'erro');	
			}
			
			if (strip_tags(stripslashes($mensagem)) == ''){
				$validou	=	false;
				adicionaMensagem(texto('MENSAGEM_ERRO_VALIDACAO_CAMPO_INPUT', array(texto('DADOS_MENSAGEM'))), 'erro');	
			}
			
			return $validou;
		}
		
		public function setIdAviso ($idAviso) {
			$this->idAviso = $idAviso;
		}

		public function getIdAviso () {
			return $this->idAviso;
		}
		
		public function setIdCurso ($idCurso) {
			$this->idCurso = $idCurso;
		}

		public function getIdCurso () {
			return $this->idCurso;
		}
		
		public function setIdUsuario ($idUsuario) {
			$this->idUsuario = $idUsuario;
		}

		public function getIdUsuario () {
			return $this->idUsuario;
		}
		
		public function setTitulo ($titulo) {
			$this->titulo = $titulo;
		}

		public function getTitulo () {
			return $this->titulo;
		}
		
		public function setMensagem ($mensagem) {
			$this->mensagem = $mensagem;
		}

		public function getMensagem () {
			return $this->mensagem;
		}
		
		public function setDataHoraInsercao ($dataHoraInsercao) {
			$this->dataHoraInsercao = $dataHoraInsercao;
		}

		public function getDataHoraInsercao () {
			return $this->dataHoraInsercao;
		}
	}
?>